package estructuras.common;

import java.util.*;

public class Ruta implements Comparable<Ruta>{
	Vector<Vuelo> vuelos = new Vector<>();
	Paquete paquete;
	
	public Ruta(List<Vuelo> vuelos, Paquete paquete){
		for(Vuelo vuelo : vuelos){
			this.vuelos.add(vuelo);
		}
		this.paquete = paquete;
	}

	public int getBottleNeck(){
		int res = paquete.getOrigen().getBottleNeckParaIntervaloDeTiempo(paquete.fechaRegistro, vuelos.firstElement().getFechaSalida());
		
		for(Vuelo v : vuelos)
			res = Math.min(res, v.getEspacioRestante());
		
		for(int i = 1; i < vuelos.size() ; i++)
			res = Math.min(res, vuelos.get(i).getConexion().getOrigen().getBottleNeckParaIntervaloDeTiempo(
					vuelos.get(i - 1).getFechaLlegada(), vuelos.get(i).getFechaSalida()));
		return res;
	}
	@Override
	public int compareTo(Ruta otro) {
		return -getBottleNeck() + otro.getBottleNeck(); 
	}

	public void ejecutaRuta() {
		paquete.getOrigen().addEstancia(new Estancia(paquete, paquete.fechaRegistro, vuelos.firstElement().getFechaSalida(), this));
		for(int i = 1 ; i < vuelos.size(); i++){
			vuelos.get(i - 1).getConexion().getDestino().addEstancia(
					new Estancia(paquete, vuelos.get(i - 1).getFechaLlegada(), vuelos.get(i).getFechaSalida(), this));
		}
		
		for(Vuelo v : vuelos){
			v.addPaqueteReservado(paquete);
		}
		paquete.setRuta(this);

	}
}
